import { login, getInfo, getInfoById } from '@/api/user.js'
import { setToken, getToken, removeToken, setTokenTime } from '@/utils/auth.js'
import { resetRouter } from '@/router'
const state = {
  token: getToken(), // 用的token
  userInfo: {}
}

const mutations = {
  // 修改token
  setToken(state, payload) {
    // 存到vuex
    state.token = payload
    // 将token存到本地的cookie中
    setToken(payload)
    // 存时间戳
    setTokenTime()
  },
  // 修改用户信息
  setUserInfo(state, payload) {
    state.userInfo = payload
  },
  // 执行退出
  logout(state) {
    // 清除token
    state.token = null
    removeToken()
    // 清除用户信息
    state.userInfo = {}
    // 重置路由规则
    resetRouter()
  }
}

const actions = {
  // 用来发送登录请求
  async login(context, data) {
    // 调用封装登录接口的方法
    const res = await login(data)
    context.commit('setToken', res)
  },
  // 获取用户信息
  async getUserInfo(context) {
    console.log('获取用户信息')
    const res = await getInfo()
    console.log(res)
    res.roles.points.forEach((item, index) => {
      // console.log(item.toLocaleLowerCase())
      if (typeof item !== 'string') return
      res.roles.points[index] = item.toLocaleLowerCase()
    })
    // 根据id获取用户详细信息
    const userInfoRes = await getInfoById(res.userId)
    context.commit('setUserInfo', { ...res, ...userInfoRes })
    return res
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
